#ifndef SCANNERLIB_H
#define SCANNERLIB_H

#include <QObject>
#include <QThreadPool>
#include <QAtomicInteger>
#include <QMutex>
#include<QTimer>
#include <QMetaType>  // 添加头文件

#ifdef SCANNERLIB_LIB
#  define SCANNERLIB_EXPORT Q_DECL_EXPORT
#else
#  define SCANNERLIB_EXPORT Q_DECL_IMPORT
#endif

class ScanTask;

struct FileResult {
    QString path;
    qint64 size;
};


Q_DECLARE_METATYPE(FileResult)          // 声明元类型
Q_DECLARE_METATYPE(QList<FileResult>)  // 声明元类型

class SCANNERLIB_EXPORT FileScanner : public QObject {
    Q_OBJECT
    Q_SIGNALS: // 明确信号作用域
public:
    explicit FileScanner(QObject *parent = nullptr);
    ~FileScanner();

    void startScan(const QString &path);      // 启动扫描
    void stopScan();                             // 停止扫描
    bool isStopRequested() const { return m_stopRequested.load() != 0; }             // 检查停止标志

signals:

    void progressBatch(const QList<FileResult> &batch);// 批量文件结果
    void finished(QList<FileResult> results);  // 全部扫描完成


//private slots:
  //  void processData(QList<FileResult> batch);        // 数据提交入口

private:
     // 线程安全控制
    QMutex m_mutex;    // 保护共享资源
    void submitTask(ScanTask* task);
    void submitBatch(const QList<FileResult>& batch);

    QAtomicInt m_stopRequested = 0;   // 原子停止标志
    QThreadPool m_threadPool;           // 任务线程池
    QList<FileResult> m_results;           // 总结果集
    int m_lastSubmittedIndex = 0; // 记录已提交结果的位置

    friend class ScanTask;             // 允许ScanTask访问私有成员
};
   // 提供C语言兼容接口，便于其他语言（如Python/C#）通过FFI调用
extern "C" SCANNERLIB_EXPORT FileScanner* createScanner();       // 创建实例
extern "C" SCANNERLIB_EXPORT void destroyScanner(FileScanner* scanner);     // 安全销毁实例

#endif // SCANNERLIB_H
